package com.xiaolin.structure.hash.arrayandlinked;

import java.util.List;

/**
 * @ClassName MyHashTable
 * @Description 自定义哈希表
 * @Detail
 *              两种结构：
 *                  1、数组+链表
 *                  2、数组+二叉树
 * @Author MyPC
 * @Date 2020/11/17
 * @Version 1.0
 */
public class MyHashTable {
    private EntryLinked[] elementArray;
    private int length;

    public MyHashTable(int length){
        this.length=length;
        elementArray=new EntryLinked[this.length];
        // 初始化链表
        for(int i=0;i<elementArray.length;i++){
            elementArray[i]=new EntryLinked();
        }
    }

    /**
     * 添加元素
     * @param e
     */
    public void add(EntryLinked.Employee e){
        this.elementArray[getIndex(e.id)].add(e);
    }

    /**
     * 根据id获取元素，id相当于key
     * @param id
     * @return
     */
    public EntryLinked.Employee getOne(int id){
        int index = getIndex(id);
        return elementArray[index].getOne(id);
    }

    /**
     * 根据id删除元素
     * @param id
     */
    public void remove(int id){
        elementArray[getIndex(id)].remove(id);
    }

    public void list(){
        for (int i=0;i<elementArray.length;i++){
            List<EntryLinked.Employee> list = elementArray[i].list();
            if(list.size()==0){
                System.out.println("该链表"+i+":没有数据");
            }else {
                System.out.println(list);
            }
        }
    }

    /**
     * 获取元素要存入的索引位置
     * @param id
     * @return
     */
    private int getIndex(int id){
        return id%this.length;
    }

}
